home *** CD-ROM | disk | FTP | other *** search
- package netscape.applet;
-
- import java.awt.Component;
- import java.awt.Window;
- import java.io.File;
- import java.io.IOException;
- import java.net.URL;
- import java.util.Vector;
- import java.util.zip.ZipFile;
- import netscape.security.AppletSecurityException;
- import netscape.security.PrivilegeManager;
- import netscape.security.Target;
-
- public final class CastanetChannelInfo {
- private static final boolean debug = false;
- private int pathlen;
- private URL[] urls;
- private String[] zips;
- private ZipFile[] openZips;
- private String host;
- private String readPath;
- private String writePath;
- private static String workspacePath = null;
- private ThreadGroup group;
- private AppletClassLoader loader;
- private Vector windows = new Vector();
-
- public CastanetChannelInfo(int var1, String var2, String var3, String var4, URL[] var5, String[] var6, ThreadGroup var7, URL var8) {
- PrivilegeManager var9 = PrivilegeManager.getPrivilegeManager();
- Target var10 = Target.findTarget("MarimbaInternalTarget");
- var9.checkPrivilegeEnabled(var10);
- this.pathlen = var1;
- if (var5 == null && var6 == null) {
- this.pathlen = 0;
- }
-
- this.readPath = makeCanonicalPath(var2);
- this.writePath = makeCanonicalPath(var3);
- if (workspacePath == null) {
- workspacePath = makeCanonicalPath(var4);
- }
-
- this.urls = var5;
- this.zips = var6;
- if (var6 != null) {
- for(int var11 = 0; var11 < this.zips.length; ++var11) {
- if (this.zips[var11] != null) {
- this.zips[var11] = makeCanonicalPath(this.zips[var11]);
- }
- }
-
- this.openZips = new ZipFile[var6.length];
- }
-
- this.group = var7;
- this.host = var8.getHost();
- this.loader = new AppletClassLoader(var8, this);
- }
-
- public static void setWorkspacePath(String var0) {
- if (workspacePath == null) {
- PrivilegeManager var1 = PrivilegeManager.getPrivilegeManager();
- Target var2 = Target.findTarget("MarimbaAppContextTarget");
- var1.checkPrivilegeEnabled(var2);
- workspacePath = makeCanonicalPath(var0);
- }
- }
-
- public static boolean marimbaCheckAccess(String var0, ClassLoader var1, boolean var2, boolean var3) {
- if (var3) {
- return checkFileAccess(var0, workspacePath, var2, true);
- } else {
- try {
- AppletClassLoader var4 = (AppletClassLoader)var1;
- return var2 ? var4.marimbaCheckRead(var0, var3) : var4.marimbaCheckWrite(var0, var3);
- } catch (ClassCastException var5) {
- return false;
- }
- }
- }
-
- public static boolean checkThreadGroup(ClassLoader var0, ThreadGroup var1) {
- if (var0 == null) {
- return true;
- } else {
- try {
- AppletClassLoader var2 = (AppletClassLoader)var0;
- return var2.marimbaCheckThreadGroup(var1);
- } catch (ClassCastException var3) {
- return false;
- }
- }
- }
-
- public static void checkTopLevelWindow(ClassLoader var0, Object var1) {
- if (var0 != null) {
- try {
- AppletClassLoader var2 = (AppletClassLoader)var0;
- var2.marimbaCheckTopLevelWindow(var1);
- } catch (ClassCastException var3) {
- }
- }
- }
-
- public static String marimbaGetHost(ClassLoader var0) {
- if (var0 == null) {
- return null;
- } else {
- try {
- AppletClassLoader var1 = (AppletClassLoader)var0;
- return var1.marimbaGetHost();
- } catch (ClassCastException var2) {
- return null;
- }
- }
- }
-
- public void close() {
- this.loader.close();
- }
-
- public Class loadClass(String var1) throws ClassNotFoundException {
- return this.loader.loadClass(var1);
- }
-
- public Class classFromBytes(byte[] var1, String var2) {
- return this.loader.classFromBytes(var1, var2);
- }
-
- boolean checkRead(String var1, boolean var2) {
- return checkFileAccess(var1, this.readPath, true, var2);
- }
-
- boolean checkWrite(String var1, boolean var2) {
- return checkFileAccess(var1, this.writePath, false, var2);
- }
-
- boolean checkThreadGroup(ThreadGroup var1) {
- return var1 == this.group;
- }
-
- void checkTopLevelWindow(Object var1) {
- try {
- this.windows.addElement((Window)var1);
- } catch (ClassCastException var2) {
- }
- }
-
- int getPathlen() {
- return this.pathlen;
- }
-
- URL getURL(int var1) {
- return this.urls == null ? null : this.urls[var1];
- }
-
- ZipFile getZip(int var1) {
- if (this.zips != null && this.zips[var1] != null) {
- if (this.openZips[var1] == null) {
- PrivilegeManager var2 = PrivilegeManager.getPrivilegeManager();
- Target var3 = Target.findTarget("MarimbaAppContextTarget");
-
- try {
- var2.enablePrivilege(var3);
- this.openZips[var1] = new ZipFile(this.zips[var1]);
- } catch (IOException var4) {
- }
-
- var2.disablePrivilege(var3);
- }
-
- return this.openZips[var1];
- } else {
- return null;
- }
- }
-
- synchronized void closeZips() {
- if (this.windows != null) {
- int var1 = this.windows.size();
-
- for(int var2 = 0; var2 < var1; ++var2) {
- Window var3 = (Window)this.windows.elementAt(var2);
- ((Component)var3).hide();
- var3.dispose();
- }
- }
-
- if (this.openZips != null) {
- for(int var5 = 0; var5 < this.openZips.length; ++var5) {
- if (this.openZips[var5] != null) {
- try {
- this.openZips[var5].close();
- } catch (IOException var4) {
- }
-
- this.openZips[var5] = null;
- }
- }
- }
-
- this.pathlen = 0;
- this.urls = null;
- this.zips = null;
- this.openZips = null;
- this.host = null;
- this.readPath = null;
- this.writePath = null;
- this.group = null;
- this.loader = null;
- this.windows = null;
- }
-
- String getHost() {
- return this.host;
- }
-
- private static String makeCanonicalPath(String var0) {
- Object var1 = null;
- if (File.separatorChar == '\\' && var0.indexOf(47) != -1) {
- var0 = var0.replace('/', '\\');
- }
-
- try {
- SecurityManager.enablePrivilege("UniversalFileRead");
- SecurityManager.enablePrivilege("UniversalPropertyRead");
- String var4 = (new File(var0)).getCanonicalPath();
- SecurityManager.revertPrivilege();
- return var4;
- } catch (IOException var3) {
- throw new AppletSecurityException(((Throwable)var3).getMessage() + ", \"" + var0 + "\"");
- }
- }
-
- private static boolean checkFileAccess(String var0, String var1, boolean var2, boolean var3) {
- if (var0 == null) {
- return false;
- } else if (var3) {
- return checkFileAccess(var0, workspacePath, var2, false);
- } else if (var1 == null) {
- return false;
- } else {
- var0 = makeCanonicalPath(var0);
- if (!var0.startsWith(var1)) {
- return false;
- } else {
- int var4 = 0;
- int var5 = var1.length();
- int var6 = var0.length();
-
- while(var5 < var6) {
- int var7 = var0.indexOf(File.separatorChar, var5);
- if (var7 < 0) {
- var7 = var6;
- }
-
- if (var5 == var7) {
- ++var5;
- } else if (var5 + 1 == var7 && var0.charAt(var5) == File.separatorChar) {
- var5 += 2;
- } else if (var5 + 1 == var7 && var0.charAt(var5) == '.') {
- var5 += 2;
- } else if (var5 + 2 == var7 && var0.charAt(var5) == '.' && var0.charAt(var5 + 1) == '.') {
- --var4;
- if (var4 < 0) {
- return false;
- }
-
- var5 += 3;
- } else {
- ++var4;
- var5 = var7 + 1;
- }
- }
-
- return true;
- }
- }
- }
- }
-